package com.linzm.leetcode.primary.exercises3_20230122;

/**
 * @Author zimingl
 * @Date 2023/1/23 17:53
 * @Description: 采集果实
 * 在新手村中，各位勇者需要采集一些果实来制作药剂。time[i] 表示勇者每次采集 1～limit 颗第 i 种类型的果实需要的时间（即每次最多可以采集 limit 颗果实）。
 * 当前勇者需要完成「采集若干批果实」的任务， fruits[j] = [type, num] 表示第 j 批需要采集 num 颗 type 类型的果实。采集规则如下：
 * 按 fruits 给定的顺序依次采集每一批次
 * 采集完当前批次的果实才能开始采集下一批次
 * 勇者完成当前批次的采集后将清空背包（即多余的果实将清空）
 * 请计算并返回勇者完成采集任务最少需要的时间。
 * 输入：time = [2,3,2], fruits = [[0,2],[1,4],[2,1]], limit = 3
 * 输出：10
 * 解释： 由于单次最多采集 3 颗 第 0 批需要采集 2 颗第 0 类型果实，需要采集 1 次，
 * 耗时为 2*1=2 第 1 批需要采集 4 颗第 1 类型果实，需要采集 2 次，耗时为 3*2=6 第 2 批需要采集 1 颗第 2 类型果实，需要采集 1 次，耗时为 2*1=2 返回总耗时 2+6+2=10
 */
public class Demo6_55 {
    public static void main(String[] args) {
        Demo6_55 demo6_55 = new Demo6_55();
        int[] time = {2,3,2};
        int[][] fruits = {{0,2},{1,4},{2,1}};
        int limit = 3;
        int minimumTime = demo6_55.getMinimumTime(time, fruits, limit);
        System.out.println(minimumTime);
    }

    private int getMinimumTime(int[] time, int[][] fruits, int limit) {
        int min = 0;
        for (int i = 0; i < fruits.length; i++) {
            int timeNum = time[fruits[i][0]];
            int fruitsNum = fruits[i][1];
            if (fruitsNum > limit) {
                double n = Math.ceil((double) fruitsNum / limit);
                min += n * timeNum;
            } else {
                min += timeNum;
            }
        }
        return min;
    }
}
